// 任务日志服务
import { getPrisma } from '../config/prisma.js';

/**
 * 创建任务日志服务
 * 处理创建新任务日志的业务逻辑
 * @param {number} userId - 用户ID
 * @param {number} taskId - 任务ID
 * @param {string} content - 日志内容
 * @returns {Promise<Object>} 创建的日志数据
 */
async function createTaskLog(userId, taskId, content) {
  try {
    const prismaClient = await getPrisma();
    console.log('正在为用户创建任务日志:', userId, '任务ID:', taskId);
    
    // 1. 验证输入
    if (!content) {
      throw new Error('日志内容是必需的');
    }
    
    // 2. 检查任务是否存在且属于用户
    const task = await prismaClient.task.findFirst({
      where: {
        id: BigInt(taskId),
        userId: BigInt(userId),
        deletedAt: null
      }
    });
    
    if (!task) {
      throw new Error('任务未找到或访问被拒绝');
    }
    
    // 3. 在数据库中创建任务日志
    const taskLog = await prismaClient.taskLog.create({
      data: {
        taskId: BigInt(taskId),
        content: content
      }
    });
    
    console.log('任务日志创建成功，ID:', Number(taskLog.id));
    
    // 4. 返回任务日志数据
    return {
      log_id: Number(taskLog.id),
      task_id: Number(taskLog.taskId),
      content: taskLog.content,
      created_at: taskLog.createdAt.toISOString()
    };
  } catch (error) {
    console.error('任务日志服务中的数据库操作失败:', error.message);
    throw error;
  }
}

/**
 * 获取任务日志列表服务
 * 处理获取任务日志列表的业务逻辑
 * @param {number} userId - 用户ID
 * @param {number} taskId - 任务ID
 * @returns {Promise<Array>} 任务日志列表
 */
async function getTaskLogs(userId, taskId) {
  try {
    const prismaClient = await getPrisma();
    console.log('正在从数据库获取任务日志，用户:', userId, '任务ID:', taskId);
    
    // 1. 检查任务是否存在且属于用户
    const task = await prismaClient.task.findFirst({
      where: {
        id: BigInt(taskId),
        userId: BigInt(userId),
        deletedAt: null
      }
    });
    
    if (!task) {
      throw new Error('任务未找到或访问被拒绝');
    }
    
    // 2. 从数据库获取任务日志
    const taskLogs = await prismaClient.taskLog.findMany({
      where: {
        taskId: BigInt(taskId),
        deletedAt: null
      },
      orderBy: {
        createdAt: 'desc'
      }
    });
    
    console.log('找到', taskLogs.length, '条任务日志，任务:', taskId);
    
    // 3. 返回任务日志数据
    return taskLogs.map(log => ({
      log_id: Number(log.id),
      task_id: Number(log.taskId),
      content: log.content,
      created_at: log.createdAt.toISOString()
    }));
  } catch (error) {
    console.error('任务日志服务中的数据库操作失败:', error.message);
    throw error;
  }
}

export default { createTaskLog, getTaskLogs };